import 'package:flutter/material.dart';
import 'package:ideology/features/screens/widgets/editor_menu_bar/dialogs/new_project_dialog/new_project_dialog.dart';
import 'package:ideology/features/screens/widgets/editor_menu_bar/setting/sdk_settings_controller.dart';
import 'package:ideology/features/screens/widgets/editor_menu_bar/setting/settings_dialog.dart';
import 'package:ideology/features/screens/widgets/editor_menu_bar/ui/editor_menu_styles.dart';

/// 应用顶部菜单栏组件。
///
/// 该菜单栏仅负责组装 UI 和分发事件，具体行为由外部
/// 通过 [onAction] 回调接收并处理。
///
/// 包含的主菜单：
/// - **File**: 新建、打开、关闭工程；
/// - **Run**: 运行、调试；
/// - **Help**: 关于；
///
/// 右侧附加快捷按钮：运行、调试、设置。
class EditorMenuBar extends StatelessWidget {
  /// 创建一个 [EditorMenuBar]。
  ///
  /// [onAction] 用于接收菜单项和按钮触发的消息。
  const EditorMenuBar({super.key, required this.onAction});

  /// 向上层传递用户动作的回调。
  ///
  /// - `String` 类型消息，如 `"Run"` / `"Open"` / `"Debug"`；
  /// - 或对话框返回的数据对象（如 [NewProjectData]、[SdkSettings]）。
  final void Function(dynamic message) onAction;

  @override
  Widget build(BuildContext context) {
    final colorScheme = Theme.of(context).colorScheme;
    final background = colorScheme.surface; // 背景色：随主题变化
    final fgColor = colorScheme.onSurface;  // 前景色：随主题变化

    return AppBar(
      toolbarHeight: 38,
      backgroundColor: background,
      elevation: 0,
      surfaceTintColor: Colors.transparent,
      automaticallyImplyLeading: false,
      titleSpacing: 0,

      // 主菜单区域
      title: MenuBar(
        style: const MenuStyle(
          backgroundColor: WidgetStatePropertyAll(Colors.transparent),
          elevation: WidgetStatePropertyAll(0),
          surfaceTintColor: WidgetStatePropertyAll(Colors.transparent),
        ),
        children: [
          _FileMenu(fgColor: fgColor, onAction: onAction),
          _RunMenu(fgColor: fgColor, onAction: onAction),
          _HelpMenu(fgColor: fgColor, onAction: onAction),
        ],
      ),

      // 右侧附加操作按钮
      actions: [
        Center(
          child: IconButton(
            tooltip: 'Run',
            icon: const Icon(Icons.play_arrow_outlined),
            color: fgColor,
            iconSize: 28,
            padding: const EdgeInsets.symmetric(horizontal: 4),
            onPressed: () => onAction('Run'),
          ),
        ),
        Center(
          child: IconButton(
            tooltip: 'Debug',
            icon: const Icon(Icons.bug_report_outlined),
            color: fgColor,
            padding: const EdgeInsets.symmetric(horizontal: 4),
            onPressed: () => onAction('Debug'),
          ),
        ),
        Center(
          child: IconButton(
            tooltip: 'Settings',
            icon: const Icon(Icons.settings_outlined),
            color: fgColor,
            iconSize: 20,
            padding: const EdgeInsets.symmetric(horizontal: 4),
            onPressed: () async {
              // 弹出 SDK 设置对话框
              final initial = await SdkSettingsController.loadSettings();

              final result = await showDialog<SdkSettings>(
                context: context,
                barrierDismissible: false,
                builder: (_) => SdkSettingsDialog(initial: initial),
              );

              if (result != null) {
                // 对话框已保存设置，这里将结果再抛给上层
                onAction(result);
              }
            },
          ),
        ),
      ],
    );
  }
}

/// “File” 子菜单。
///
/// 包含：New / Open / Close。
class _FileMenu extends StatelessWidget {
  const _FileMenu({required this.fgColor, required this.onAction});

  /// 文本颜色（随主题变化）。
  final Color fgColor;

  /// 动作分发回调。
  final void Function(dynamic) onAction;

  @override
  Widget build(BuildContext context) {
    final menuPopupStyle = EditorMenuStyles.menuPopupStyle(context);

    return SubmenuButton(
      menuStyle: menuPopupStyle,
      menuChildren: [
        // 新建工程
        MenuItemButton(
          onPressed: () async {
            final created = await showDialog<NewProjectData>(
              context: context,
              barrierDismissible: false,
              builder: (_) => const NewProjectDialog(),
            );
            if (created != null) {
              onAction(created);
            }
          },
          child: Text('New', style: TextStyle(color: fgColor)),
        ),
        // 打开工程
        MenuItemButton(
          onPressed: () => onAction('Open'),
          child: Text('Open', style: TextStyle(color: fgColor)),
        ),
        // 关闭工程
        MenuItemButton(
          onPressed: () => onAction('Close'),
          child: Text('Close', style: TextStyle(color: fgColor)),
        ),
      ],
      child: Text('File', style: TextStyle(color: fgColor)),
    );
  }
}

/// “Run” 子菜单。
///
/// 包含：Run / Debug。
class _RunMenu extends StatelessWidget {
  const _RunMenu({required this.fgColor, required this.onAction});

  final Color fgColor;
  final void Function(dynamic) onAction;

  @override
  Widget build(BuildContext context) {
    final menuPopupStyle = EditorMenuStyles.menuPopupStyle(context);

    return SubmenuButton(
      menuStyle: menuPopupStyle,
      menuChildren: [
        MenuItemButton(
          onPressed: () => onAction('Run'),
          child: Text('Run', style: TextStyle(color: fgColor)),
        ),
        MenuItemButton(
          onPressed: () => onAction('Debug'),
          child: Text('Debug', style: TextStyle(color: fgColor)),
        ),
      ],
      child: Text('Run', style: TextStyle(color: fgColor)),
    );
  }
}

/// “Help” 子菜单。
///
/// 包含：About。
class _HelpMenu extends StatelessWidget {
  const _HelpMenu({required this.fgColor, required this.onAction});

  final Color fgColor;
  final void Function(dynamic) onAction;

  @override
  Widget build(BuildContext context) {
    final menuPopupStyle = EditorMenuStyles.menuPopupStyle(context);

    return SubmenuButton(
      menuStyle: menuPopupStyle,
      menuChildren: [
        MenuItemButton(
          onPressed: () => onAction('About'),
          child: Text('About', style: TextStyle(color: fgColor)),
        ),
      ],
      child: Text('Help', style: TextStyle(color: fgColor)),
    );
  }
}
